鸡尾酒排序，也称为双向冒泡排序，是一种简单的排序算法，它的特点是能够在特定的情况下，减少排序的回合数。它与冒泡排序类似，但是不同之处在于排序时是以双向在序列中进行排序的。在这种排序方法中，首先从左到右遍历一遍序列，然后从右到左再遍历一遍序列，以此类推，直到序列有序。

下面举一个例子。
由 8 个数字组成一个无序数列{2,3,4,5,6,7,8,1}，希望对其进行从小到大的 排序。

```js
// 元素 2、3、4、5、6、7、8 已经是有序的了，只有元素 1 的位置不对，却还要进行 7 轮排序，这也太“憋屈”了吧! 
// 没错，鸡尾酒排序正是要解决这个问题的。
// 
let arr = [2, 3, 4, 5, 6, 7, 8, 1];
let tem = 0;
for (let i = 0; i < arr.length / 2; i++) {
  //有序标记，每一轮的初始值都是true
  let isSorted = true;

  // 奇数轮从左向右进行比较和交换
  for (let j = i; j < arr.length - 1 - i; j++) {
    if (arr[j] > arr[j + 1]) {
      tem = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = tem;
      isSorted = false; // 有元素交换所以不是有序的，标识为false
    }
  }

  if (isSorted) break;

  // 在偶数轮之前，将isSorted重新标记为true
  isSorted = true;

  // 偶数轮从右到左进行交换。
  for (let j = arr.length - 1; j > i; j--) {
    if (arr[j] < arr[j - 1]) {
      tem = arr[j];
      arr[j] = arr[j - 1];
      arr[j - 1] = tem;
      isSorted = false; // 有元素交换所以不是有序的，标识为false
    }
  }

  if (isSorted) break;
}

console.log(arr, `运行了${count}次`); //  [1, 2, 3, 5, 6, 7, 8, 9] '运行了11次'
```
